通常面對大型專案或實際需求時,運用協同與別人合作的方法是最常見的,能提升程式碼的可靠性與維護上的方便。不過為了確保智慧財產或一些企業內機密資料不要過度被存取,程式設計師會透過前置修飾詞(Modifiers)去限制各類別、函數、屬性等存取或被存取範圍。
主要是希望利用前置修飾詞去控制別人能看到的內容,藉此保護資訊和程式的安全問題。
Modifier又會被分成兩類 :
-> 兩者差別是是否擁有存取的權限。非存取限制修飾詞雖然不具權限,但會提供其他功能性的關鍵詞。
public
: 權限範圍最大,可以被任何類別存取。default
: 可以被同一個套件的類別存取,其他則否。(沒指定修飾字時預設)public
default
private
: 權限範圍最小,僅能被同類別存取,通常運用在封包(Encapsulation)上。public class First{
private String name = "Chi";
private String location = "Taipei";
private int age = 20;
static void student(){
System.out.println("Your're junior.");
}
}
public class Second{
public static void main(String[] args){
System.out.println(First.name); //error
System.out.println(First.location); //error
System.out.println(First.age); //error
First.student(); //error
}
}
-> 因為類別First中變數的修飾字是private
,所以不能在另外一個類別中使用。
protected
: 除了同套件的類別外,還能被其extends
之子類別(subclass)存取。public class Student {
protected String name = "Chi";
protected int grade = 41;
protected char gpa = 'E';
}
class college extends Student {
private int graduation = 2024;
public static void main(String[] args) {
college newobj = new college();
System.out.println("Name: " + newobj.name);
System.out.println("Grade: " + newobj.grade);
System.out.println("gpa: " + newobj.gpa);
System.out.println("Graduation Year: " + newobj.graduation);
}
}
-> 第一個類別中的變數修飾字為protected,所以繼承它類別的college可以直接使用。
(此圖製作參考Java備忘筆記-修飾子比較表)
final
: 用此修飾字宣告之類別,不能被其他類別繼承。abstract
: 此宣告類別不能用來創造物件,代表無建構子,可用繼承的方式儲存內容。abstract class Main {
public String name;
public abstract void salary(); // abstract method
}
/*abstract Main(){ //Constructor : error
String name = "Jason"
}*/
// Subclass (inherit from Main)
class employee extends Main {
String name = "Jason"
public void salary() {
System.out.println("Salary : 45000");
}
}
程式解析 : 因為我們前置修飾子抽象(abstract)宣告之類別不能創造物件,只能透過繼承方式先設定變數函數屬性,再者到不同類別去設定物件。
final
、static
、abstract
、transient
、synchronized
、volatile
-> 此處部分關鍵字較少用到,不多做解釋。有興趣可以參考EDUCBA官方網站介紹。
以上內容若有錯誤或任何問題,煩請不吝嗇告知,謝謝您!!!